/*单例模式*/
#include <iostream>
using namespace std;

//饿汉模式
class test1
{
private:
    test1():data(10) {}
    ~test1(){}
    test1(const test1&)=delete;
    test1& operator=(const test1&)=delete;
private:
    int data;
    static test1 t1;
public:
    static test1& get_test1() { return t1; }
    int val() { return data; }
};
test1 test1::t1;

//懒汉模式
class test2
{
    private:
    test2():data(10) {}
    ~test2(){}
    test2(const test2&)=delete;
    test2& operator=(const test2&)=delete;
private:
    int data;
public:
    static test2& get_test2()
    {
        //静态变量下
        static test2 t2; 
        //static test2 t2; 第一次执行为创建 第二执行就是直接调用了 因为是静态变量
        return t2;
    }
    int val() { return data; }
};

int main()
{
    cout<<test2::get_test2().val()<<endl;
    cout<<test2::get_test2().val()<<endl;

    return 0;
}
